const { PDFDocument } = require('pdf-lib');
const fs = require('fs');
const path = require('path');

export interface ISplitPdfInterface {
  inputFilePath: string | null;
  outputFilePath: string | null;
  startPage: number;
  endPage: number;
}
export async function splitPDFByPageRange(
  inputFilePath: string,
  outputFilePath: string,
  startPage: number,
  endPage: number,
) {
  try {
    // 读取输入的 PDF 文件
    const pdfBytes = fs.readFileSync(inputFilePath);

    // 加载 PDF 文档
    const pdfDoc = await PDFDocument.load(pdfBytes);

    // 获取 PDF 文档的总页数
    const totalPages = pdfDoc.getPageCount();
    if (!endPage) {
      endPage = totalPages;
    }
    // 验证输入的起始页和结束页是否合法
    if (startPage < 1 || endPage > totalPages || startPage > endPage) {
      throw new Error('Invalid page range.');
    }

    // 创建一个新的 PDF 文档
    const newPdfDoc = await PDFDocument.create();

    // 复制指定范围内的页面到新文档
    for (let i = startPage - 1; i < endPage; i++) {
      const [copiedPage] = await newPdfDoc.copyPages(pdfDoc, [i]);
      newPdfDoc.addPage(copiedPage);
    }

    // 将新文档保存为 PDF 文件
    const newPdfBytes = await newPdfDoc.save();
    // 生成输出文件的路径，确保包含文件名
    const outputFileName: string = `page_${startPage}_${endPage}.pdf`;
    const outputFilePathFileName: string = path.join(
      outputFilePath,
      outputFileName,
    );

    fs.writeFileSync(outputFilePathFileName, newPdfBytes);
    console.log(`PDF split completed. New PDF saved to ${outputFilePath}`);
    return {
      success: true,
      message: 'PDF 文件已分割成功',
    };
  } catch (error) {
    console.error('Error splitting PDF:', error);
    return {
      success: false,
      message: 'PDF 文件分割失败',
    };
  }
}
